iT邦幫忙

2024 iThome 鐵人賽

DAY 30
0
Security

腳本小子的滲透測試學習筆記系列 第 30

第30天:CEH第十五章SQL注入

  • 分享至 

  • xImage
  •  

1. SQL Injection 的定義

  • SQL 注入 是利用網頁應用程式中未經適當驗證或過濾的使用者輸入來將惡意的 SQL 指令傳遞給後端資料庫,從而對資料庫進行惡意操作的技術。
  • SQL 是一種用來與資料庫互動的文字語言,常見的 SQL 操作指令包含 INSERTSELECTUPDATEDELETE,這些指令用來對資料庫中的資料進行新增、查詢、更新及刪除等操作。
  • SQL 注入通常發生於應用程式接收來自使用者的輸入(如表單、查詢字串或網址參數),並將其直接嵌入到 SQL 查詢中,而未對輸入進行適當的過濾或驗證,導致惡意 SQL 指令可以被直接執行。

2. SQL Injection 的工作原理

SQL 注入的工作原理是透過未經驗證的輸入來操作 SQL 查詢字串,使資料庫執行原本不應該允許的指令。常見的 SQL 注入攻擊過程如下:

  1. 攻擊者在輸入欄位中輸入惡意的 SQL 指令,例如:

    ' OR 1=1 --
    

    上述指令的作用是將原本的 SQL 查詢條件變成 WHERE UserID = '' OR 1=1 --,這會使查詢條件始終為真(因為 1=1 永遠成立),從而繞過驗證並返回所有的資料。

  2. 攻擊者可以進一步使用此技術來查看資料表結構、提取敏感資料、修改資料,甚至刪除資料表。

3. SQL Injection 攻擊類型

根據攻擊者使用 SQL Injection 的目的和目標,SQL 注入可以分為以下幾種攻擊類型:

  1. Authentication and Authorization Bypass(身份驗證及授權繞過)
    • 攻擊者通過繞過應用程式的驗證機制來登錄至受保護的頁面,而無需提供有效的帳號及密碼。
  2. Information Disclosure(資料洩露)
    • 攻擊者利用 SQL 注入來查詢或洩露原本不應該公開的敏感資料,例如使用者個人資訊、帳號及密碼、信用卡資訊等。
  3. Compromised Integrity and Availability of Data(資料完整性及可用性受損)
    • 攻擊者修改、刪除或添加資料,使得資料庫中的資料被竄改或刪除,影響資料的完整性及可用性。
  4. Remote Code Execution(遠端代碼執行)
    • 攻擊者透過 SQL 注入將惡意代碼嵌入到資料庫中並執行,達到對資料庫伺服器或相關系統的控制權。

4. SQL Injection 的常見利用手法

以下是 SQL 注入的幾種常見攻擊手法:

  • 利用 UNION 操作符合併查詢結果

    • 攻擊者使用 UNION 操作符將多個查詢結果合併,從而在查詢結果中包含惡意資料。
  • 利用布林邏輯條件繞過驗證

    • 攻擊者可以在查詢中加入布林條件來繞過身份驗證,範例如下:

      SELECT * FROM users WHERE username = '' OR 1=1 -- AND password = 'password';
      
  • 透過時間盲注判斷 SQL 執行結果

    • 攻擊者利用 SLEEP() 函數來延遲 SQL 查詢執行時間,從而判斷資料庫中是否存在某個特定條件或資料。

SQL Injection 與伺服器端技術的關係

  1. 伺服器端技術(Server-side Technology):
    • 伺服器端技術(如 ASP.NET)和資料庫伺服器使開發者能夠輕鬆創建動態、基於資料的網站與網頁應用程式。然而,這些技術在使用時如果未遵循安全編碼規範,容易受到 SQL Injection 攻擊的威脅。
  2. 利用(Exploit):
    • 強大的技術如 ASP.NET 和 SQL 如果未正確使用,會成為駭客攻擊的目標。駭客可透過 SQL Injection 攻擊這些系統,竊取或篡改資料庫中的敏感資訊。
  3. 易受影響的資料庫(Susceptible Databases):
    • 所有關聯型資料庫,包括 SQL Server、Oracle、IBM DB2 和 MySQL,都可能受到 SQL 注入攻擊的影響。這些資料庫在接受來自應用程式的輸入時,如果沒有妥善進行驗證與處理,就有可能被攻擊者惡意利用。
  4. 攻擊(Attack):
    • SQL Injection 攻擊並不是針對特定的軟體漏洞,而是針對那些未遵循安全編碼規範的網站和網頁應用程式。這些應用程式允許攻擊者操作和查詢儲存在資料庫中的資料,因此成為攻擊的主要目標。

SQL Injection 攻擊範例

以下是幾個常見的 SQL Injection 攻擊範例及其說明:

  1. 更新資料(Updating Table):

    • 攻擊者 SQL 查詢

      blah'; UPDATE jb-customers SET jb-email = 'info@certifiedhacker.com' WHERE email = 'jason@springfield.com'--
      
    • 執行的 SQL 查詢

      SELECT jb-email, jb-password, jb-login_id, jb-last_name
      FROM members
      WHERE jb-email = 'blah';
      UPDATE jb-customers SET jb-email = 'info@certifiedhacker.com' WHERE email = 'jason@springfield.com'--
      
    • 攻擊效果
      透過注入 UPDATE 語句,攻擊者將指定帳戶的 email 欄位更新為 info@certifiedhacker.com。這意味著攻擊者能夠竄改現有資料表中的特定資料。

  2. 新增資料記錄(Adding New Records):

    • 攻擊者 SQL 查詢

      blah'; INSERT INTO jb-customers (jb-email, jb-password, jb-login_id, jb-last_name)
      VALUES ('jason@springfield.com','hello','jason','Jason Springfield')--
      
    • 執行的 SQL 查詢

      SELECT jb-email, jb-password, jb-login_id, jb-last_name
      FROM members
      WHERE jb-email = 'blah';
      INSERT INTO jb-customers (jb-email, jb-password, jb-login_id, jb-last_name)
      VALUES ('jason@springfield.com','hello','jason','Jason Springfield')--
      
    • 攻擊效果
      攻擊者利用 INSERT INTO 語句新增一筆新的記錄到資料庫中,使得資料庫中存在惡意攻擊者加入的假資料。

  3. 辨識資料表名稱(Identifying Table Name):

    • 攻擊者 SQL 查詢

      blah' AND 1=(SELECT COUNT(*) FROM mytable)--
      
    • 執行的 SQL 查詢

      SELECT jb-email, jb-password, jb-login_id, jb-last_name
      FROM members
      WHERE jb-email = 'blah' AND 1=(SELECT COUNT(*) FROM mytable)--
      
    • 攻擊效果
      此查詢嘗試確認 mytable 資料表是否存在於資料庫中,從而收集目標資料庫架構資訊。

  4. 刪除資料表(Deleting a Table):

    • 攻擊者 SQL 查詢

      blah'; DROP TABLE Creditcard;--
      
    • 執行的 SQL 查詢

      SELECT jb-email, jb-password, jb-login_id, jb-last_name
      FROM members
      WHERE jb-email = 'blah';
      DROP TABLE Creditcard;--
      
    • 攻擊效果
      攻擊者利用 DROP TABLE 語句刪除資料庫中的整個 Creditcard 資料表,導致資料遺失或服務中斷。

  5. 返回更多資料(Returning More Data):

    • 攻擊者 SQL 查詢

      OR 1=1
      
    • 執行的 SQL 查詢

      SELECT * FROM User_Data WHERE Email_ID = 'blah' OR 1=1
      
    • 攻擊效果
      此查詢會返回 User_Data 資料表中的所有記錄,因為 OR 1=1 始終為真,這樣攻擊者便可繞過查詢條件獲取所有資料。


終於完賽了,總結一下我這次的缺點,由於沒有事先規劃好30天要幹嘛只好照著CEH的步驟來,好家在最後還是拿到證照了


上一篇
第29天:CEH第十四章入侵Web應用程式(續)
系列文
腳本小子的滲透測試學習筆記30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言